package main

import "fmt"

//结构体
type student struct {			//比如这个表示同学的姓名和学号，就相当于每个同学有一个单独的卡片，这个卡片上写着这个学生的学号和姓名
	id		int					//格式如这样，元素名     元素类型
	name	string
}

//初始化结构体以及如何取出结构体内的数据
func test11() {
	stuA := student{211701, "张三"}
	stuB := student{
		2111702,
		"李四",
	}
	stuC := student{
		id: 211703,
		name: "王五",
	}
	fmt.Println("有这么三个同学：", stuA, "和", stuB, "和", stuC)
	fmt.Println("A同学的名字：", stuA.name, "A同学的学号:", stuA.id)		//通过结构体变量.xxx取出结构体中某个元素的值
}

//修改某个结构体变量内容
func test12() {
	stuA := student{211701, "张三"}
	fmt.Println("A同学的名字：", stuA.name, "A同学的学号:", stuA.id)		//通过结构体变量.xxx取出结构体中某个元素的值
	stuA.name = "法外狂徒张三"
	stuA.id = 110
	fmt.Println("修改后A同学的名字：", stuA.name, "A同学的学号:", stuA.id)		//通过结构体变量.xxx取出结构体中某个元素的值
}

//初始化数组
func test13() {
	//常规操作
	var arr1 []int					//声明一个整型数组arr1，其他类型数组同理
	arr1 = []int{1,2,3,4,5,6}
	fmt.Println("看看arr1长什么样:", arr1)
	//快速操作
	arr2 := []int{1,2,3,4,5,6}
	fmt.Println("看看arr2长什么样:", arr2)
	len1 := len(arr1)				//arr1数组的长度
	len2 := len(arr2)				//arr2数组的长度
	fmt.Println("arr1数组的长度：", len1, "，arr2数组的长度:", len2)
}

//增加数组元素
func test14() {
	arr1 := []int{1,2,3,4,5,6}
	fmt.Println("修改前的数组arr1:", arr1)
	arr1 = append(arr1, 7)	//通过append()方法在arr1的末尾添加元素7，并再次将添加完新元素的数组赋值给arr1，从而使arr1变成有新元素的数组
	fmt.Println("修改后的数组arr1:", arr1)
}

//删除数组元素
func test15() {
	arr1 := []int{1,2,3,4,5,6}
	fmt.Println("修改前的数组arr1:", arr1)		//假设删除第3个元素
	arr1 = append(arr1[:2], arr1[3:6]...)			//由于golang没有提供删除数组元素的方法，所以只能自己实现一下
													//首先要明白一点，代码中数组下标从0开始，也就是说第3个元素下标是2
													//这一步的操作意思是将arr1数组从0-2个和3-5个拼接在一起
													//要注意一点，[:]冒号前如果没有数字默认从0开始，冒号后没有数字默认到结尾
													//冒号前有数字表示从这个数字对应的下标开始，冒号后有数字表示到这个数字的前一个下标为止
	fmt.Println("修改后的数组arr1:", arr1)
}

//查询数组第n位元素
func test16(n int) {
	arr1 := []int{1,2,3,4,5,6}
	fmt.Println("数组arr1:", arr1)
	a := arr1[n]									//通过[n]来选取第n位的元素的内容，注意：n必须在从0到数字长度-1
													//因为数组从0开始，如果数组总共有k个，则最后一个元素的下标为k-1
	fmt.Println("第", n, "位是", a)
}






















